
Linux-1
Linux Environment & Managing Users and Groups
İki konu başlığımız var her ikisi için de önce kısa bir konu anlatımı takiben hands-on yapacağız.
Linux Environment
Ortam değişkenleri, işletim sistemimizde bulunan veya uygulamanın kapsayıcısında çalışan uygulamamızın dışındaki değişkenlerdir. Ortam değişkeni, bir değere eşitlenen bir addır. Normalde kod yazarken programın içinde değişkenlere değer atarız ve bu değerlere ancak programın içinden ulaşabiliriz. Environment variables ile bu program dışından da yapılabilinir. Yani duruma göre çalışan bir programın hali hazırdaki verilerini değiştirebilir ve bunun için tek satır koda dokunmamız gerekmez.
Faydaları:
- Şifre gibi önemli verileri kod içine yazmayıp .env dosyasında tutabiliriz.
- Pratiklik, örneğin sadece port numarası değişecek kodu değiştirmenize gerek kalmaz.
Ortam değişkenleri oluşturulabilir, düzenlenebilir, kaydedilebilir ve silinebilir ve sistem davranışı hakkında bilgi verir. Ortam değişkenleri shell tarafından yönetilir ama herhangi bir program tarafından kullanılabilir. Ayrıca shell değişkenleri vardır bunlar da sadece shell içerisinden kullanılabilir.
printenv >> Kayıtlı tüm ortam değişkenlerini gösterir. Değişkenler büyük harfle yazılır.

Örneğin "$LANG" bir ortam değişkenidir. Bu değişken sayesinde Türk kullanıcıya Türkçe arayüz Alman kullanıcıya Almanca arayüz gösterilesini sağlar.
En Fazla Kullanılan Ortam Değişkenleri:
PATH : Executable dosyaların yollarının belirtildiği değişken. Dosyalar birbirinden ":" ile ayrılır.
USER : Kullanıcı adı
LANG : Geçerli yerel ayarlar.
SHELL : Kullanılan shell.
HOME : Default kullanıcı home yolu. Burda daha net anlaşılacak. Normalde ec-2 larımızda home /home/ec2-user bu adrestir. Öncelikle home klasörümde yeni_home adıyla bir klasör oluşturdum. Daha sonra export HOME=/home/ec2-user/yeni_home komuto ile HOME ortam değişkenini değiştirdim. herhangi bir dosyanın içine girip cd veya cd~ komutunu çalıştırdığımda home olarak yeni belirttiğim adrese girmiş olacak.

flask isimli kalsörün altındaki template klasörüne gittikten sonra cd~ komutunu çalıştırdım pwd ile baktığımda home un değiştiğini gördüm.
En Fazla Kullanılan Komutlar:
printenv >> Tüm ortam değişkenlerini yazdırır. Parametre olarak bilinen bir değişkeni verirseniz o değişkenin değerini yazdırır.
env >> printenv ile aynı printenv ile tek bir değişken bilgileri alınabilir.
set >> hem env veriable hem de shell variable, fonksiyonlar gelir
YENIDEGISKEN=yenideger >> Yeni shell değişkeni oluşturma. "=" in sağında solunda boşluk olmamalı. sadece çalışan shell de görülebilir.
export YENIDEGISKEN=yenideger >> Yeni ortam değişkeni oluşturma. "=" in sağında solunda boşluk olmamalı.
echo $yeni_degisken >> Ortam değişkeni değerini yazdırma. Değişkenin önüne "$" işareti koyarak kullanıyoruz. Büyük/küçük harf duyarlıdır dikkat edelim.
unset YENIDEGISKEN >> Ortan değişkenini siler
export HOME=/home/ec2-user/yeni_home >> Yukarıda örnek verirken kullanmıştık ortam değişkeni değerini değiştirme.
export PATH=$PATH:/games/awesome >> export komutunu append(ekleme) için de kullanıyoruz. PATH değişkeninde birçok yol kayıtlı, onları bozmadan ilave yapmak için PATH den sonra ":" kullanıp yeni ilave etmek istediğimiz yolu giriyoruz.
PATH değişkenini biraz yakından tanıyalım. Bir komut çalıştırmak istediğimizde genelde komutun tam yolu girmeyiz sadece komutu yazarız ve çalışır. Basit bir örnek verelim ls komutu klasör içinde ne varsa listeliyordu ve biz bunu sadece ls yazdığımızda yapıyordu. Aslında bu komut /bin klasörünün içerisinde path değişkeni olmasaydı komutu /bin/ls şeklinde yazmamız gerekirdi.
Aslınd mantık şu önce ls komutunu arıyor bulamayınca path deki yolları deneyeccek ilk bulduğunda aramayı sonlandıracak. Allahtan bu kısaydı daha uzun olanlar da var 🙂. ls komutu nerede diye merak ederseniz yolunu bulmak için which -a ls komutunu kullanabilirsiniz.
Hands-On
Difference between "env" and "printenv" commands.
env >> tüm ortam değişkenlerini gösterir.
printenv >> aynı şekilde tüm ortam değişkenlerini gösterir ayrıca spesifik bir değişkeni parametre olarak alabilir.

shell variable ile environment variable farkı.
shell variable sadece yaratıldığı shellde kullanılabilir. Kullanıcı değiştirdiğinde yeni kullanıcıda kullanılamaz.

VAREC2 ismiyle bir değişken oluşturduk. user1 kullanıcısına geçtik değeri göremedik.

Bu sefeer VARS3 değişkenini export ile yani environment variable şeklinde oluşturduk. Yine user1 e geçtik ve değerini orda da görebildik.
Change the environment variable value.
Remove the environment variable with unset command.
PATH variable.
printenv PATH komutu ile PATH değerlerlerini görebiliriz.

Örneğin kullandığımız cat komutu metin dosyasının içeriğini yazdırıyor ve bu komutu hangi klasörde olursak olalım çalıştırabiliyoruz. eğer PATH değişkenine uygun değer girilmemiş olsa idi biz her cat çalıştımak istediğimizde /bin/cat şeklinde girmemiz gerekecekti.
Add a path to PATH variable for running a script.
yukarıda konuyu anlattık aslında şimdi bir sh uzantılı tek komut içeren bir script hazırlayacağız. Script'e çalıştırma yetkisi vereceğiz ve bunu tüm klasörlerden ulaşılabilir hale getireceğiz.

yukarıda gördüğünüz gibi bir üst klasörde komut çalışmadı. peki çalışması için ne yapmamız gerekiyor. bulundğu yolu PATH enviroment değişkenine eklememiz gerekiyor.

artık heryerden ulaşılıyor.
-Using the environment variable in the script.
Burada elimizde string bir ifade olacak ve içerisinde iki değişken oalcak birisi shell değişkeni diğeri enviroment değişkeni. Değişkenlere atama yapınca environment değişkeninin değerini string içinde görürken shell değişkeninin kendisini göreceğiz çünkü değerini orada kullanamayacak.
stringimiz "normally we should see env. variable $CLARUS but probably we can't see the shell variable $WAY "

Görüldüğü üzere $CLARUS yazan yerde artık env.var yazıyor. $WAY yazan yer boş çünkü stringin içinde geçerli değil sadece yaratıldığı shell de kullanılır.
Double Quotes.
Burada iki konu var birincisi çift tırnak içinde değişkenlerin değerleri geçerlidir ama tek tırnak içerisinde değişekeni değişken gibi değil normal bir string ifade olarak okur. Diğer konu "\" işareti, bu işaret özel bir karakterin önüne gelirse onun özelliğini görmezden gel anlamında kullanılır.

hata aldık sebebi eğer boşluk kullanmak istiyorsak stringe çevirmemiz yani tırnak içine almamız gerekiyor. "my value" şeklinde

MYVAR değişkenin değerini yazdırdık.

MYVAR değişkenin değerini değiştirdik ve string içinde kullandık yeni değerini yani james i string olarak yazdı.

burası önemli MYNAME adında bir değişken tanımlanıyor ve bu değişken MYVAR değişkeninin içinde kullanılıyor burada sıkıntı yok. ama alttaki örnekte MYNAME değişkeinin önünde "\" var bu işaret $ işaretinin özel anlamını yok ediyor normal string gibi okunuyor.
Single Quotes.

tek tırnak içerinde özel karekterlerin anlamı olmaz yani $ işareti olması onun değişken olduğunu göstermez ne görülüyorsa çıktı da o olur.
Sudo Command.
Bu komut normal kullanıcı yetkisi ile çalıştırılamayan komutların çalıştırılması için kullanılır.

yum update komutunu normal kullanıcı yapamaz.

cd / kök dizine gider kök dizinde ancak admin yetkilidir o yüzden hata aldık.

"sudo su" ile "sudo su -" farkını göstereceğim. ilk örnekte ec2-user kullanıcısının home klasöründeyiz ve root user a geçtik. root user yetkiisndeyiz ama şuan yine ec2-user ın home klasöründeyiz.

sudo su - kullandığımızda şuan root kök dizinindeyiz.
NOT: sudo su ile sudo -s aynı şekilde çalışır.
Managing Users and Groups
Kullanıcı türlerini göreceğiz. sudo ile başlayalım. "Superuser do" nun kısaltmasıdır. Admin kullanıcısı değilsiniz ve admin yetkilerini kullanmak istiyorsunuz kodunuz başına sudo yazabilirsiniz. Size şifre soracak ve komutunuzu uygulayacak.
(#) komut satırınızda bu işaret varsa root olarak açmışsınız sudo kullanmanıza gerek yoktur.
sudo komutlar:
sudo -l >> Kullanabileceğiniz sudo komutlarını listeler.
sudo <command> >> Komutunuzu sudo ile çalıştırırsınız.
sudo -u <user> < command> >> farklı bir kullanıcı ile komut çalıştırma
sudo su >> root kullanıcısına geçme komutu
sudo su - >> root kullanıcısına geçer ver root kullanısının home klasüne gitmiş olursunuz. Yukarıdakinden farkı şu ki sadece sudo su yaptığınızda admin kullanıcısna geçersiniz ama en son nerede iseniz o klasördesinizdir.
sudo su - username >> kullanıcı değiştirme komutu
sudo -s >> sudo ile shell başlatma
sudo -u user -s >> kullanıcı ile shell başlatma
Basit Kullanıcı komutları:
whoami >> kullanıcı adı bilgisini verir.

who >> sistemde kimlerin oturum açtığını gösterir. Zaman ve ip bilgisiyle birlikte detalı gösterir.

who am i >> aktif oturum ile ilgili kullanıcı adı, zaman ve ip bilgisi verir.

w >> kimin oturum açtığını ve ne yaptığını size bildirecektir.

id >> id komutu, kullanıcı kimliğinizi, birincil grup kimliğinizi ve ait olduğunuz grupların bir listesini sağlayacaktır.

su >> Başka bir kullanıcı hesabına geçmek için kullanılır. Aşağıda clarusway hesabından john hesabına geçti.

su - >> Yukarıdaki komut gibi kullanıcı değiştirmek için kullanılır ama bu sefer hangi kullanıcıya geçti isek o kullanıcının home klasöründen başlarsınız.

Not: su veya su - komutunun yanına herhangi bi kullanıcı girilmez ise root a geçiş yapar.
sudo su >> Bu komut ile parola girmeden root kullanıcısına geçebilirsiniz.
su -c >> İstenilen kullanıcının shell oturumuna komut gönderebilmeyi sağlar.

User anagement(Kullanıcı Yönetimi)
Linux çok kullanıcı kullanımına müsade eder. BU durumda kullanıcı ekleme değiştirme silme gibi işlemleri yapabilmek gerekir. Erişimi kolaylaştırmak için de gruplar oluşturulur. KOmutları aşağıda görebilirsiniz.
/etc/passwd >> yerel kullanıcı veritabanını gösterir. Aşağıda son 5 kullanıcının bilgilerini görüyorsunuz.

useradd >> Yeni kullanıcı yaratmanızı sağlar.
useradd -m -d /home/kamil -c "kamilin hesabi" kamil
-m >> home klasörü yaratmaya zorlar.
-d >> home klaörünün ismi
-c >> açıklama

adduser kamile >> tek tek sziden bilgi isteyrek kullanıcı yaratmanızı sağlar.
userdel -r kamile>> kullanıcı silmeyi sağlar.
usermod -c "kamilin aciklamasi degisti" kamil >> kullanıcı bilgilerinde modify etmeye yarar.
passwd >> herhangir kullanıcıda iken komutu çalıştırdığınızda kullanıcının şuan ki şifresini ister daha sonra değiştirmek istenilen değer girilir. eğer root kullanıcısında iseniz passwd kamil kullanıcı adıyla birlikte girmeniz gerekir. burada önemli bir detay var root kullanıcında olduğunuz için şuan ki şifreyi istemez direk yeni şifre oluşturur. oldu da şifreyi unutursanız bu şekilde değiştirebilrsiniz.
shadow file >> kullanıcı paraloları şifreli bir şekilde /etc/shadow dosyasında bulunur. sadece root yetkisi ile okunabilir.
/etc/login.defs >> paralo ile ilgili uzunluk maksimum kullanım minimum kullanım gibi değerleri gösterir.
groupadd birinci_grup >> yeni grup oluşturma kodu.
usermod -a -G birinci_grup kamil >> usermod komutunu görmüştük değiştirme demiştik burada da aslında grubunu değitirmiş olduk. Bu komutu kullanırken dikkatli olmak gerekiyor eğer grup adı girilmez ise kullanıcı herhangi bir gruba dahil olmayacaktır.
Group File >> bir kullanıcı birden fazla gruba dahil olabilir. kullanıcının dahil olduğu grupları görmek için tail -3 /etc/group komutu kullanılır. 3 degişebilir.
groups >> hangi kullanıcıda bu komutu verdiyseniz o kullanıcının dahil olduğu grubu gösterir.
groupmod >> grup adını değiştirmek için kullanılır.
groupdel >> grubu siler
groupdel birinci_grup önemli uyarı: eğer silmek istediğiniz grup birincil ise silemezsiniz
gpasswd >> bir gruba kullanıcı ekleyebilir veya silebilirsiniz
gpasswd -a john aws >> ekleme
gpasswd -d walter aws >> silme
Hands
whoami >> hangi kullanıcı aktif öğrenmek için kullanılır.

ec2-user kullancısında komutu verdiğimizde ec2-user olarak cevap verdi kullanıcı değiştirdik. tekrar aynı komutu uyguladığımızda yeni geçilen kullanıcı ismini verdi
id >> güzel komuttur kendileri. mevcut kullanıcının user id, grup id ve dahil olduğu grupları gösterir.

id root >> aynı işlemi root için uygular.

passwd >> kullanıcıya şifre tanımlaması için kullanılır. Burada bir bilgi paylaşayım yeni kullanıcı oluştururken ya sudo ile yapıyoruz veya root a geçip oluturyoruz. Diyelim oluşturduk. Root da isek zaten şifre istemeden giriyor ama başka bir kullanıcıda isek şifre soracak ve şiferyi bilmiyoruz o yüzden kullanıcı oluşturduktan sonra passwd komutu ile şifre verelim.

Önce kullanıcı oluşturduk daha sonra şifresini belirledik.
/etc/passwd >> komutun kendileri sistemde kayıtlı kullanıcıları görmenizi sağlar. tabi direk bu şekilde kullanılmaz. ya cat ile içini okuruz veya tail head gibi seçenkelerle içine bakabiliriz. İçi baya kalabalık olduğu için biz tail ile son kullanıcılara bakalım 🙂

useradd >> bunu zaten diğer örneklerde kullanmak zorunda kaldık kulanıcı ekler bu komut da. Dikaket edilecek nokta root yetkisi ile yapılmalı.

Dikkat etti iseniz yeni kullanıcı oluşturunca home klasörünün altına o kullanıcıya ait klasör oluşturdu.
Peki yeni kullanıcı oluştururken home dosyası olması istiyorsunuz. Onun da çaresi var /etc nin içerisinde login.defs adında bir dosya var o dosyanın da içerisinde "CREATE_HOME yes" komutu var siz bunu no yaptığınız da artık yeni kullanıcı oluşturduğnuzda evsiz olacak 😂
O kadar iyi niyetlisiniz ki login.defs dosyasının içindeki değer no iken yeni kullanıcıların evi olsun istiyorsunuz bu durumun da çaresi var 😂

Onun haricinde useradd komutunun aldığı birkaç parametre daha var birisi de -d. Bu parametre ile de siz home klasörünüzün isimlendirebiliyorsunuz.

user20 adında kullanıcı yarattık normalde default user20 klasörü açılacaktı. ama biz klasör ismini 20_nin_evi şeklinde değiştirdik.
adduser komutunun son parametresi -c. Description ekleme.

useradd ve adduser ubuntuda farklı centos da aynı çalışıyor. adduser ubuntuda tek tek bilgi girişi yapmanı ister.
userdel >> kullanıcı silmek için kullanılır. Dikkat edilmesi gereken nokta birincisi root yetkisi ile yapılmalı ikincisi sudo userdel -r user21 "-r" komutunu kullanılmazsa kullanıcı silinir ama home klasörü size hatıra kalır 🙂

-r parametresiz user21 i sildik user21 folderı silinmedi.

user6 yı -r parametresi ile silmek istedik ama siilemedik neden? çünkü zaten biz user6 yız bula bula kendimi buldum 😂 user12 yi sildik home klasörü de gitti.
usermod >> bu komut da halihazırdaki kullanıcılarda bir takım değişiklik yapmaya yarar.

user20 nin -c parametresi ile usermod komutu kullanarak description bilgisini değiştirdik.
sudo usermod --help >> komutu ile başka neleri değiştirebiliriz diye bakabilirsiniz.
-l parametresi kullanıcı adı değişrimek için kullanılır.

user20 kullanıcısının ismini Superuser olarak değiştirdik.
Group Management >>
groups >> hangi kullanıcıda iseniz o kullanıcının dahil olduğu tüm grupları gösterir.
[ec2-user@ip-172-31-84-58 ~]$ groups ec2-user adm wheel systemd-journal
grupları görmek için /etc/group dosyasına da cat veya head/tail ile bakabilirsiniz. Burada tüm gruplar gözükecektir.
sudo groupadd linux >> linux adında bir grup oluşturur.
sudo usermod -a -G linux ec2-user >> ec2-user kullanıcısını linux grubuna dahil eder. fakat dahil olup olmadığını kullanıcıdan logout olup tekrar login olduktan sonra görebilrsiniz.
sudo groupmod -n my-linux linux >> groupmode grup bilgilerinde değişiklik yapar. -n parametresi ile grubun ismini değiştirebiliriz.
sudo groupdel python >> oluşturulan grubu siler. tail /etc/group komutu ile kontrol edebilirsiniz. kullanıcısı olan grubu silemeyiz primary grup.
sudo gpasswd -a user7 aws >> komutu bir kullanıcıyı belirtilen gruba ekler.
sudo gpasswd -a user7 aws >> komutu bir kullanıcıyı belirtilen gruptan siler.









